﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="ISubjectGroupMaintenanceDomainService.cs" company="ELEN 7045 GROUP II">
//    Contributed by E.Vosloo
// </copyright>
// <summary>
//   An interface defining the behaviour of the subject group maintenance domain service.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace Domain.StudyDefinition.Contracts.DomainServices
{
    #region

    using Domain.Setup.Entities;
    using Domain.StudyDefinition.Entities;

    #endregion

    /// <summary>
    /// An interface defining the behaviour of the subject group maintenance domain service.
    /// </summary>
    public interface ISubjectGroupMaintenanceDomainService
    {
        #region Public Methods

        /// <summary>
        /// Adds the subject group to study.
        /// </summary>
        /// <param name="treatment">
        /// The treatment which the subject group should be added to
        /// </param>
        /// <param name="subjectGroup">
        /// The subject group.
        /// </param>
        /// <returns>
        /// The modified Study
        /// </returns>
        Study AddSubjectGroupToTreatment(Treatment treatment, SubjectGroup subjectGroup);

        /// <summary>
        /// Deletes the subject group.
        /// </summary>
        /// <param name="subjectGroup">
        /// The subject group.
        /// </param>
        void DeleteSubjectGroup(SubjectGroup subjectGroup);

        /// <summary>
        /// Moves the subject group to a new location.
        /// </summary>
        /// <param name="subjectGroup">
        /// The subject group.
        /// </param>
        /// <param name="location">
        /// The new location.
        /// </param>
        /// <returns>
        /// The modified study
        /// </returns>
        SubjectGroup MoveSubjectGroupToNewLocation(SubjectGroup subjectGroup, Location location);

        /// <summary>
        /// Removes the subject group from study.
        /// </summary>
        /// <param name="study">
        /// The study.
        /// </param>
        /// <param name="subjectGroup">
        /// The subject group.
        /// </param>
        void RemoveSubjectGroupFromStudy(Study study, SubjectGroup subjectGroup);

        /// <summary>
        /// Removes the treatment from subject group.
        /// </summary>
        /// <param name="subjectGroup">
        /// The subject group.
        /// </param>
        /// <param name="treatment">
        /// The treatment.
        /// </param>
        void RemoveSubjectGroupFromTreatment(SubjectGroup subjectGroup, Treatment treatment);

        /// <summary>
        /// Updates the subject group.
        /// </summary>
        /// <param name="subjectGroup">
        /// The subject group.
        /// </param>
        void UpdateSubjectGroup(SubjectGroup subjectGroup);

        #endregion
    }
}